init();

function init() {
	let isShowLoading = false;
	let isShowToast = false;
	const {
		showLoading,
		hideLoading,
		showToast,
		hideToast
	} = wx;
	Object.defineProperty(wx, "showLoading", {
		configurable: true, // 是否可以配置
		enumerable: true, // 是否可迭代
		writable: true, // 是否可重写
		value(...param) {
			if (isShowToast) {
				// Toast优先级更高
				return;
			}
			isShowLoading = true;
			// console.log("--------showLoading--------");
			return showLoading.apply(this, param); // 原样移交函数参数和this
		}
	});
	Object.defineProperty(wx, "hideLoading", {
		configurable: true, // 是否可以配置
		enumerable: true, // 是否可迭代
		writable: true, // 是否可重写
		value(...param) {
			if (isShowToast) {
				// Toast优先级更高
				return;
			}
			isShowLoading = false;
			// console.log("--------hideLoading--------");
			return hideLoading.apply(this, param); // 原样移交函数参数和this
		}
	});
	Object.defineProperty(wx, "showToast", {
		configurable: true, // 是否可以配置
		enumerable: true, // 是否可迭代
		writable: true, // 是否可重写
		value(...param) {
			if (isShowLoading) {
				// Toast优先级更高
				wx.hideLoading();
			}
			isShowToast = true;
			// console.error("--------showToast--------");
			return showToast.apply(this, param); // 原样移交函数参数和this
		}
	});
	Object.defineProperty(wx, "hideToast", {
		configurable: true, // 是否可以配置
		enumerable: true, // 是否可迭代
		writable: true, // 是否可重写
		value(...param) {
			isShowToast = false;
			// console.error("--------hideToast--------");
			return hideToast.apply(this, param); // 原样移交函数参数和this
		}
	});
}

function formatNumber(n) {
	const str = n.toString();
	return str[1] ? str : `0${str}`;
}
export function formatTime(date) {
	const year = date.getFullYear();
	const month = date.getMonth() + 1;
	const day = date.getDate();

	const hour = date.getHours();
	const minute = date.getMinutes();
	const second = date.getSeconds();

	const t1 = [year, month, day].map(formatNumber).join("/");
	const t2 = [hour, minute, second].map(formatNumber).join(":");

	return `${t1} ${t2}`;
}

/**
 * 从缓存里获取数据
 * @param key
 * @return value
 */
export function getStorageSync(key) {
	return uni.getStorageSync(key);
}

/**
 * 显示加载中
 * @param data
 */
export function showToast(data) {
	uni.showToast({
		title: data,
		icon: 'none'
	})
}

/**
 * 显示加载中
 * @param data
 */
export function showLoading(data) {
	uni.showLoading(data);
}

/**
 * 隐藏加载中
 */
export function hideLoading() {
	uni.hideLoading();
}

/**
 * 将数据保存到缓存
 * @param key
 * @param value
 */
export function setStorageSync(key, value) {
	uni.setStorageSync(key, value);
}

/**
 * 移除缓存数据
 * @param {Object} key
 */
export function removeStorageSync(key) {
	uni.removeStorageSync(key);
}

/* 
 * 处理富文本里的图片宽度自适应
 * 1.去掉img标签里的style、width、height属性
 * 2.img标签添加style属性：max-width:100%;height:auto
 * 3.修改所有style里的width属性为max-width:100%
 * 4.去掉<br/>标签
 * @param html
 * @returns {void|string|*}
 */
export function formatRichText(html) {
	let newContent = html.replace(/<img[^>]*>/gi, function(match, capture) {
		match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
		match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
		match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
		return match;
	});
	newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) {
		match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi,
			'max-width:100%;');
		return match;
	});
	newContent = newContent.replace(/<br[^>]*\/>/gi, '');
	newContent = newContent.replace(/\<img/gi,
		'<img style="max-width:100%;height:auto;display:inline-block;margin:10rpx auto;"');
	return newContent;
}

//校验手机格式
export function checkMobile(mobile) {
	// return /^1[23456789]\d{9}$/.test(mobile) || /^\d{3}\d{7,8}|\d{4}\d{7,8}$/.test(mobile);
	return RegExp(
		"^((13[0-9])|(14(0|[5-7]|9))|(15([0-3]|[5-9]))|(16(2|[5-7]))|(17[0-8])|(18[0-9])|(19([0-3]|[5-9])))\\d{8}$"
	).test(mobile);
}

//获取当前日期函数
export function convertTimeType(time) {
	var date = new Date(time);
	var Y = date.getFullYear() + '-';
	var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
	var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';

	var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
	var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
	var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
	var strDate = Y + M + D + h + m + s;
	return strDate
}

//获取当前日期函数
export function getNowFormatDate(time) {
	let date = new Date(time),
		year = date.getFullYear(), //获取完整的年份(4位)
		month = date.getMonth() + 1, //获取当前月份(0-11,0代表1月)
		strDate = date.getDate() // 获取当前日(1-31)
	if (month < 10) month = `0${month}` // 如果月份是个位数，在前面补0
	if (strDate < 10) strDate = `0${strDate}` // 如果日是个位数，在前面补0

	return `${year}-${month}-${strDate}`
}

export default {
	formatNumber,
	formatTime,
	getStorageSync,
	setStorageSync,
	removeStorageSync,
	showLoading,
	hideLoading,
	showToast,
	formatRichText,
	convertTimeType,
	getNowFormatDate,
	checkMobile
};
